package com.wenx.v3system.modular.cloud.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wenx.base.rest.BaseRestService;
import com.wenx.v3system.modular.cloud.domain.dto.UserAssignmentDataDto;
import com.wenx.v3system.modular.cloud.domain.dto.SysUserDto;
import com.wenx.v3system.modular.cloud.domain.po.SysUser;
import com.wenx.v3system.modular.cloud.domain.query.SysUserQuery;

import java.util.List;

/**
 * 系统用户服务接口
 * 基于Enhanced RBAC权限模型的用户管理
 * 
 * @author wenx
 */
public interface SysUserRestService extends IService<SysUser>, BaseRestService<SysUserDto, SysUserQuery> {

    /**
     * 根据用户名查询用户
     */
    SysUserDto getUserByUsername(String username);

    /**
     * 用户登录验证
     */
    SysUserDto login(String username, String password);

    /**
     * 获取用户所有权限
     */
    List<String> getUserPermissions(Long userId);

    /**
     * 检查用户是否有指定权限
     */
    boolean hasPermission(Long userId, String permission);

    /**
     * 获取用户可访问的菜单列表
     */
    List<Long> getUserAccessibleMenus(Long userId);

    /**
     * 重置用户密码
     */
    String resetUserPassword(Long userId);

    /**
     * 更新用户状态
     */
    void updateUserStatus(Long userId, Integer status);

    /**
     * 更新最后登录信息
     */
    void updateLastLoginInfo(Long userId, String loginIp);

    /**
     * 检查用户名是否存在
     */
    boolean checkUsernameExists(String username, Long excludeId);

    /**
     * 检查邮箱是否存在
     */
    boolean checkEmailExists(String email, Long excludeId);

    /**
     * 清除用户权限缓存
     */
    void clearUserPermissionCache(Long userId);

    /**
     * 清除所有权限缓存
     */
    void clearAllPermissionCache();

    /**
     * 根据部门ID获取用户列表
     */
    List<SysUserDto> getUsersByDepartmentId(Long departmentId);

    /**
     * 获取用户分配数据（角色、部门、团队）
     */
    UserAssignmentDataDto getUserAssignmentData();
}
